package com.jinwei.qunguanjia.system.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageInfo;
import com.jinwei.qunguanjia.system.dao.SysDictDataDAO;
import com.jinwei.qunguanjia.system.dto.SysDictDataDTO;
import com.jinwei.qunguanjia.system.po.SysDictDataPO;
import com.jinwei.qunguanjia.common.core.domain.entity.SysDictData;
import com.jinwei.qunguanjia.common.core.domain.model.Condition;
import com.jinwei.qunguanjia.common.core.page.PageDataInfo;
import com.jinwei.qunguanjia.common.utils.ConditionUtils;
import com.jinwei.qunguanjia.common.utils.DictUtils;
import com.jinwei.qunguanjia.common.utils.JsonUtils;
import com.jinwei.qunguanjia.common.utils.SearchUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service("sysDictDataService")
public class SysDictDataServiceImpl implements SysDictDataService {

    @Resource
    private SysDictDataDAO sysDictDataDAO;

    @Override
    public void save(SysDictDataDTO sysDictDataDTO) throws IllegalAccessException {
        SysDictDataPO sysDictDataPO = new SysDictDataPO();
        BeanUtils.copyProperties(sysDictDataDTO, sysDictDataPO);
        int row = sysDictDataDAO.insert(sysDictDataPO);
        if (row > 0) {
            List<SysDictData> dictDataList = JsonUtils.copyList(list(SysDictDataDTO.builder().dictType(sysDictDataDTO.getDictType()).build()), SysDictData.class);
            DictUtils.setDictCache(sysDictDataDTO.getDictType(), dictDataList);
        }
    }

    @Override
    public void remove(List<String> ids) {
        LambdaQueryWrapper<SysDictDataPO> lambdaWrapper = new LambdaQueryWrapper<>();
        lambdaWrapper.in(SysDictDataPO::getDictDataId, ids);
        sysDictDataDAO.delete(lambdaWrapper);
    }

    @Override
    public void update(SysDictDataDTO sysDictDataDTO) throws IllegalAccessException {
        SysDictDataPO sysDictDataPO = new SysDictDataPO();
        BeanUtils.copyProperties(sysDictDataDTO, sysDictDataPO);
        int row = sysDictDataDAO.updateById(sysDictDataPO);
        if (row > 0) {
            List<SysDictData> dictDataList = JsonUtils.copyList(list(SysDictDataDTO.builder().dictType(sysDictDataDTO.getDictType()).build()), SysDictData.class);
            DictUtils.setDictCache(sysDictDataDTO.getDictType(), dictDataList);
        }
    }

    @Override
    public SysDictDataDTO get(String id) {
        SysDictDataPO sysDictDataPO = sysDictDataDAO.selectById(id);
        SysDictDataDTO sysDictDataDTO = new SysDictDataDTO();
        BeanUtils.copyProperties(sysDictDataPO, sysDictDataDTO);
        return sysDictDataDTO;
    }

    @Override
    public SysDictDataDTO get(SysDictDataDTO sysDictDataDTO) throws IllegalAccessException {
        // 添加查询条件
        List<Condition> conditionList = ConditionUtils.add(sysDictDataDTO);
        // 拼接查询条件
        QueryWrapper<SysDictDataPO> queryWrapper = SearchUtils.parseWhereSql(conditionList);
        SysDictDataPO sysDictTypePO = sysDictDataDAO.selectOne(queryWrapper);
        if (null == sysDictTypePO){
            return null;
        }
        BeanUtils.copyProperties(sysDictTypePO, sysDictDataDTO);
        return sysDictDataDTO;
    }

    @Override
    public Integer count(SysDictDataDTO sysDictDataDTO) {
        return null;
    }

    @Override
    public List<SysDictDataDTO> list(SysDictDataDTO sysDictDataDTO) throws IllegalAccessException {
        // 添加查询条件
        List<Condition> conditionList = ConditionUtils.add(sysDictDataDTO);
        // 拼接查询条件
        QueryWrapper<SysDictDataPO> queryWrapper = SearchUtils.parseWhereSql(conditionList);
        return JsonUtils.copyList(sysDictDataDAO.selectList(queryWrapper), SysDictDataDTO.class);
    }

    @Override
    public PageDataInfo<SysDictDataDTO> listPage(SysDictDataDTO sysDictDataDTO) throws IllegalAccessException {
        // 添加查询条件
        List<Condition> conditionList = ConditionUtils.add(sysDictDataDTO);
        // 拼接查询条件
        QueryWrapper<SysDictDataPO> queryWrapper = SearchUtils.parseWhereSql(conditionList);
        List<SysDictDataPO> list = sysDictDataDAO.selectList(queryWrapper);
        PageInfo<SysDictDataPO> pageInfo = new PageInfo<>(list);
        PageDataInfo<SysDictDataDTO> pageDataInfo = new PageDataInfo<>();
        pageDataInfo.setData(JsonUtils.copyList(list, SysDictDataDTO.class));
        pageDataInfo.setTotal(pageInfo.getTotal());
        return pageDataInfo;
    }
}
